-- 2022-7-28

--[[
    Lua语言中，函数是对语句和表达式进行抽象的主要方式。
    函数既可以用于完成某种特定任务，也可以只是进行一些计算返回计算结果。

    函数调用需要使用括号包括参数

    唯一例外的是，当函数只有一个参数且是字符串或者表构造器时可以省略

    Lua语言为面向对象风格的调用提供了一种特殊的语法，即冒号操作符。
    形如o:foo(x) 意为调用对象o的foo方法

    一个Lua程序既可以调用Lua语言编写的函数，也可以调用C语言(或者其他宿主程序使用的其他任意语言)编写的函数
    一般来说，我们选择使用C语言编写的函数来实现对性能要求更高或者不容易直接提供Lua语言进行操作的操作系统机制等等

    无论一个函数用什么语言，调用时都没有区别

    函数传入的参数，和局部变量的性质一样

    调用函数时使用的参数个数可以与定义函数时使用的参数个数不一致，Lua语言会通过抛弃多余参数和将不足的参数设为nil的方式来调整参数的个数
    function f(a,b) print(a,b) end
    f() --> nil nil
    f(3) --> 3  nil
    f(3,4,5) --> 3  4
    虽然这种可能会导致编程错误(运行时容易发现)，但同样又是有用的，尤其是对于默认参数的情况，我们需要规避一些未赋值的情况，做一些判断
]]